這篇將會著重在 class
的介紹,帶入基本的物件導向觀念(Object-Oriented Programming)
基本觀念
一個 class
的概念,通常包含了 state 跟 behavior ,state 通常就是該 class
的常用變數,會使用到的或者跟這個 class
有關的都會在裡面做宣告。而 behavior 很像是這個 class
能夠做到哪些事情,或者一些相關的函式 (member function)
class car {
private var wheels: Int = 4
// member function
fun printWheelsNum() {
print("The number of wheels: "+wheels)
}
}
fun main(args: Array<String>) {
val myCar = car() // create obj object of myClass class
myCar.printWheelsNum()
}
class 的構造就是把一個程式的想法物件模組化,先規劃好一些功能的藍圖,之後將它給建構出來。上面的程式碼就是實作了一個 class
,這個 class
的藍圖就是基於如何去形容一輛車子,車子有許多的零件,包含了輪子、品牌、速度、顏色 ... 等眾多的元件,透過 class
可以有架構的去闡述這件事情,今天我的程式碼只要知道這台車的輪子,那我就可以宣告一個變數 wheels 去紀錄,並且實作一個 member function 將該輪子數給印出來。
那如果今天還想要知道該品牌是什麼呢?如果今天想要加入一個 funciton 做出"幫車子加油 fillUp()" 的動作呢?這些都能夠透過 class
將概念寫出來,當然啦,藍圖越有條理越簡單,寫出來的 class
會越容易去維護唷!
kotlin
的 class
可以有很多的 constructor
,使用 init
來宣告內容,constructor
就是當該 class
被宣告的時候,會在當下就直接執行 constructor
的內容。通常會用來對該 class
賦值用,當然也可以有其他的用法唷!class InitOrderDemo(name: String) {
val firstProperty = "First property: $name".also(::println)
init {
println("First initializer block that prints ${name}")
}
val secondProperty = "Second property: ${name.length}".also(::println)
init {
println("Second initializer block that prints ${name.length}")
}
}
inner class
class BMW {
private val brand: String = "BMW"
inner class car {
fun brand() = brand
}
inner class motorcycle {
fun brand() = brand
}
}
inner class
的意思就是 class
裡面還有一個 class
,裡面的那層 class
可能會需要使用到外面 class
的變數,當宣告成 inner
的時候,才有辦法去拿取外面class
的變數唷
data class
data class
看起來是專門用來存放資料的 class
,不去做任何 function 上的實作,在 Kotlin
上也有簡化 class constructor 的用途,讓塞資料更加方便快速。
data class Person(val name: String, val age: Int)